HI Jackin'!" - praca zbiorowa BuraQ tim'u.
Michal Wojcik (michalw@irad.kul.lublin.pl) wrote:
: Interesuje mnie problem hijackingu, czyli inaczej przejecia sesji
: jakiejs maszyny unixowej. Interesuje mnie mechanizm takiego dzialania i
: wszystkie szczegoly.
	Hijacking - ang. porywanie/przechwytywanie moze w tym przypadku miec
kilka znaczen. 
Najbardziej znanym przykladem ``hijackingu'' jest wszystkim nam znany
``hijacking zamolotow''. Chyba wszyscy wiemy na jakiej zasadzie dzialaja
porywacze. Przebieraja sie za stare babcie, kobiety w ciazy a takze za
dzieci. Ma to za zadanie ukazac brodatych mezczyzn oraz przewaznie barczyste
kobiety w innym swietle. Maja zostac nierozpoznani. Dziala to mniej wiecej
tak. Niech celnik bedzie obiektem A a porywacz obiektem B.
Obiekt A jest po to aby pilnowac samoloty odlatujace z pewnego
bliskowschodniego kraju C przed obiektami typu B. (W rzeczywistosci typ
A = administrator, a typ B = chaker, podczas, gdy typ C = serwer).
Zalozmy ze typ B przebiera sie za staruszke skrzetnie ukrywajac twarz
(ahh... ten czarny zarost .. pewnie sie nie poznaja ..), wchodzi do
poczekalni gdzie mu ustepuja wszyscy miejsca, obiekt B traci zelazne nerwy,
zaczyna popelniac bledy. Nie podpiera sie laska podczas chodzenia, mowi
basem itp. itd.
Zalozmy ze nasz obiekt typu B szczesliwie (?) doszedl do bramki  gdzie
oczekuje na niego obiekt typu A. I co sie dzieje? Na pytania typu:
``Dlaczego babcia ma taki duzy zarost'' odpowiada ``Bo od malego 
lecialam na piguly''(Hi DkA :). Obiekt A zaczyna myslec.. Mysli mysli mysli
..  I do czego dochodzi? Ze to jakis fejk. Straszne nie? Tyle przygotowan ,
tyle strachu... I wszystko na nic .. Obiekt B zostaje zabrany na osobista
kontrol. Obiekty typu A dostaja zawau na widok umiesnionej staruszki z
zarostem na piersiach. Obietki typu A szaleja na widok przyrodzenia
staruszki (ahhh Ci biali inaczej .....). Hijacking sie udal, babcia
spokojnie udaje sie w kierunku obiektu C. Tam to sie bedzie dzialo .. ale to
juz inna bajka ...						=M.a.4.7= / BuraQ Team
A teraz kilka slow nt. hijackingu od.. tego, no... jak mu tam.. a! mnie!:
	Jako hijacking mozemy tez rozumiec TCP Hijacking, czyli
metode pozwalajaca na przejecie polaczenia TCP miedzy dwoma maszynami,
z ktorych najczesciej przynajmniej jedna polozona jest w tej samej sieci
lokalnej, co atakujacy. (dzieki czemu moze on odbierac pakiety adresowane do
i wysylane z tejze maszyny). Innymi slowy, jest to przyklad spoofingu
polaczonego ze sniffingiem (badz z jakakolwiek inna mozliwoscia ustalenia
numerow SYN/ACK, ktore to numery - zawarte w naglowku protokolu TCP - sluza
niezawodnej transmisji jak tez potwierdzeniu autentykacji zrodla
przychodzacych pakietow).
	Termin TCP Hijacking nazywany jest generalnie TELNET Hijacking,
mimo, ze odnosi sie do dowolnej aplikacji korzystajacej z protokolu TCP.
(ten rodzaj spoofingu jest mozliwy takze np. w polaczeniach radiowych z
wykorzystaniem protokolu AX25 jako drugiej warstwy modelu ISO OSI).
	Jesli oznaczymy atakujacego jako A, a maszyny miedzy ktorymi
nawiazane jest polaczenie B i C (w tym przykladzie B jest w tej samej
podsieci co A), to jesli A ustawi karte sieciowa w promiscuous mode, moze
odbierac pakiety adresowane do innych maszyn w swojej podsieci, tym samym
takze do B. W ten sposob moze on ustalic numery SYN/ACK polaczenia miedzy
B i C, i jesli bedzie wysylal pakiety do maszyny C jako maszyna B korzystajac
z tych numerow, maszyna C uzna je za wlasciwe, a wlasciwe polaczenie po
chwili zostanie zdesynchronizowane.
	Atak ten jest bardzo przejzyscie opisany w dokumencie spoofit:
http://main.succeed.net/~coder/spoofit/spoofit.html, polecam.
	Hijacking moze miec takie odniesienie lokalne - jako przyklad
ataku sluzacego do przechwycenia konkretnej sesji uzytkownika (TTY Hijacking).
W przypadku systemow z rodziny SystemV mozemy skorzystac ze STREAMS
(strumieni) - przykladem takiego programu dla systemu SunOS jest TAP -
jednak latwo wykrywalny przez program systemowy 'modstat'. 
	W Phracku 50tym jeden z artykolow pokazal, jak cos takiego
zrobic za pomoca ladowalnych modulow (na przykladzie Linuxa), natomiast w
Phracku 51 opisana byla ciekawa metoda w jaki sposob zrobic to samo
korzystajac z dostepu do pamieci za pomoca device'a /dev/kmem, (przy
wykorzystaniu praw roota, badz grupy kmem [mem] w niektorych systemach).
Korzystajac z tej metody mozliwe jest przechwytywanie deskryptorow plikow,
grzebiac bezposrednio w tablicy deskryptorow pamieci kernela. Poza
przechwytywaniem mozliwa jest takze ich duplikacja i takie tam ...
	Jeszcze inne przyklady Hijackingu moga dotyczyc innych protokolow
sieciowych (np. w przypadku UDP sama forma ataku zalezna bedzie od
zastosowanego rozwiazania w konkretnym programie. Przykladem tego jest
NFS Hijacking).					Galek Anonymousek / BuraQ team
O czym jest ten tekst ?


Linux jest wydajnym, w pe│ni 32 bitowym systemem, znakomicie dzia│aj╣cym w sieciach. 
Zalet wynikaj╣cych z mo┐liwo£ci korzystania np. z Internetu nie trzeba chyba nikomu 
t│umaczyµ. Nie ma chyba jednak rozwi╣za± doskona│ych, tote┐ u┐ytkownik (a tym bardziej
 administrator systemu), powinni zdawaµ sobie sprawΩ z pewnych zagro┐e± na jakie mog╣ 
natkn╣µ siΩ w momencie po│╣czenia siΩ ze £wiatem. 

Dokument ten ma praktyczne zastosowanie w sieciach TCP/IP powinien wiΩc znakomicie
 s│u┐yµ Linuxom pracuj╣cym w Internecie. Poruszona tu zostanie wiΩkszo£µ zagadnie±
 zwi╣zanych z bezpiecze±stwem systemu (na tyle na ile pozwala mi moja obecna wiedza).
 Mo┐liwe jednak, ┐e niekt≤re rzeczy wyja£niΩ niezbyt precyzyjnie; niekt≤re sprawy 
zostan╣ wrΩcz tylko zasygnalizowane. Zajrzyj w razie potrzeby do odpowiednich 
dokumentacji po niezbΩdne szczeg≤│y. 

--------------------------------------------------------------------------------

Zale┐y mi aby tekst ten by│ '100% bugs free'. 
Dlatego w przypadku wykrycia jakiegokolwiek b│Ωdu lub powa┐nej nie£cis│o£ci proszΩ 
o dok│adn╣ informacjΩ na ten temat. 

--------------------------------------------------------------------------------

Jakie podstawowe rzeczy muszΩ wiedzieµ ?

Nie trzeba wielkiej wiedzy. Przede wszystkim pamiΩtaj, ┐e pojΩcie 
'po│╣czen ze £wiatem' oznacza zwykle (w przypadku domy£lnie skonfigurowanych, 
niezabezpieczonych system≤w) praktycznie nie kontrolowan╣ komunikacjΩ w obie 
strony. Tak wiΩc o ile komputer A mo┐e po│╣czyµ siΩ z dowolnym komputerem na
globie, o tyle DOWOLNY komputer ma mo┐liwo£µ po│╣czenia siΩ z komputerem A.
Wobec tego szansa, ┐e komu£ uda siΩ w│amaµ do komputera A jest bardzo du┐a.
Dobrze jest te┐ wiedzieµ, ┐e potencjalnym w│amywaczem mo┐e byµ u┐ytkownik, 
kt≤remu sam za│o┐y│e£ konto u siebie. Nie oka┐ siΩ wiΩc zbyt naiwnym adminem. 

--------------------------------------------------------------------------------


Jakie s╣ rodzaje w│ama± ?

Rodzaje w│ama± podzieli│em na dwie grupy:
1) poprzez wykorzystanie us│ug zdalnych udostΩpnianych przez serwer
2) poprzez przechwycenie has│a i wykorzystanie dziur w systemie od wewn╣trz
 (czyli jako legalny u┐ytkownik systemu). 

Og≤lnie rzecz bior╣c w pierwszym przypadku zak│adam, ┐e hacker nie posiada konta 
na serwerze, na kt≤ry chce siΩ w│amaµ. Jest to du┐o trudniejsze zadanie. Dlatego 
czΩsto stosuje siΩ mieszane metody. 
Wyobraƒ sobie nastΩpuj╣c╣ przyk│adow╣ sytuacjΩ. Za│≤┐my, ┐e w│amano siΩ na komputer A
z zewn╣trz (np. wykorzystano fakt, ┐e komputer obs│ugiwany by│ przez bardzo star╣ 
wersjΩ sendmaila pe│n╣ b│Ωd≤w). NastΩpnie LEGALNY u┐ytkownik z komputera A loguje siΩ
na Twoja maszynΩ stosu╣╣c niekodowane po│╣czenie (np. popularnym telnetem lub rloginem).
Istnieje mo┐liwo£µ przechwycenia po drodze ci╣gu znak≤w, reprezentuj╣cych has│o 
u┐ytkownika na TWOIM (!!!) systemie (has│o jest oczywi£cie wysy│ane z komputera A).
Teraz znaj╣c has│o tego u┐ytkownika, hacker loguje siΩ bez najmniejszych przeszk≤d
na Tw≤j serwer i... tak tak masz k│opoty je£li nie zabezpieczy│e£ serwera od £rodka.
Zwr≤µ uwagΩ, ┐e nie ma w tym momencie znaczenia czy udostΩpniasz £wiatu jakiekolwiek
us│ugi. Zostaje oszukana procedura identyfikuj╣ca zaufanego u┐ytkownika.
--------------------------------------------------------------------------------
 

OK. Jak wiΩc zabezpieczyµ system ?
1) Na pocz╣tku okre£l dok│adnie jakie us│ugi maj╣ byµ udostΩpniane z Twojego serwera. 
Domy£lnie Linux udostΩpnia £wiatu wiΩcej us│ug ni┐ jest to potrzebne w wiΩkszo£ci
typowych zastosowa±. Wszystkie zbΩdne us│ugi nale┐y wy│╣czyµ (czyli usun╣µ, lub 
zignorowaµ znakiem # w pliku /etc/inetd.conf ). NastΩpnie ponownie uruchom inetd
z now╣ konfiguracj╣. 
2) Programy obs│uguj╣ce wybrane serwisy (tzw. demony) powinny zostaµ zaktualizowane.
Powiniene£ wiΩc zaopatrzyµ siΩ w ich najnowsze wersje. Przed instalacj╣ zawsze
sprawdzaj sumy kontrolne PGP !!! S│ynny jest przypadek podmienienia pakietu ssh na
jednym z bardzo popularnych polskich serwer≤w FTP. Zapoznaj siΩ dok│adnie z 
odpowiedni╣ dokumentacj╣ do ka┐dego serwisu. To umo┐liwi Ci poprawne skonfigurowanie.
3) WszΩdzie gdzie to mo┐liwe stosuj po│╣czenia szyfrowane (SSH, SSL). DziΩki temu
zminimalizujesz ryzyko np. przechwycenia hase│ snifferem. Staraj siΩ aby has│a Twoich
u┐ytkownik≤w by│y do£µ skomplikowane oraz ┐eby czΩsto ulega│y zmianie. Mo┐liwe, ┐e 
bΩdziesz musia│ to wyt│umaczyµ ka┐demu u┐ytkownikowi z osobna na pewno siΩ zyskasz 
na tym w przysz│o£ci. Swego czasu sporo by│o w│ama± polegaj╣cych na odgadniΩciu 
trywialnego has│a kt≤rego£ z u┐ytkownik≤w. Nie s╣ wiΩc zalecane imiona ┐on, dzieci,
ulubionych dru┐yn. Kombinacje polegaj╣ce na odwr≤ceniu kolejno£ci liter w 
identyfikatorze u┐ytkownika (np. root toor) czy te┐ elitarne zast╣pienie litery 'O'
cyfr╣ '0' s╣ naprawdΩ zbyt oklepane, aby │udziµ siΩ, ┐e nikt tego nie wymy£li. Znaj╣c 
dan╣ osobΩ │atwo jest znaleƒµ kilka(na£cie) wyraz≤w kt≤re bΩd╣ kojarzyµ siΩ w│a£nie z
ni╣. Dobre has│a zawieraj╣ inne dopuszczalne znaki ni┐ litery i cyfry (np. nawiasy, 
wykrzyknik, znak dolara, plus, kropka itd.). Has│a powinny mieµ odpowiedni╣ d│ugo£µ,
a u┐ytkownik powinien mieµ pewn╣ wprawΩ przy ich wpisywaniu bardzo │atwo jest 
podpatrzeµ has│o gdy kto£ jednym palcem wystukuje 'S│oneczko' lub 'Metallica' 
z szybko£ci╣ 1 znaku na p≤│ minuty.
4) Zaopatrz siΩ w programy s│u┐╣ce do dostarczania dodatkowych informacj o
 po│╣czeniach 
z Twoim komputerem. Przydatne tu bΩd╣ tcp wrappers oraz pakiet iplogger. 
Odpowiednio skonfigurowane tcp wrappers umo┐liwi╣ na serwowanie wybranych us│ug dla
wybranych komputer≤w/sieci (dziΩki plikom /etc/hosts.allow i /etc/hosts.deny) za£ 
programy z pakietu iplogger bΩd╣ CiΩ informowaµ o wszelkich pr≤bach po│╣cze± z 
zewn╣trz (pomaga to w wykryciu portscanningu).< 5) Aby wyeliminowaµ denerwuj╣ce
informacje o pr≤bach po│╣cze± z setkami port≤w Twojej maszyny, zapoznaj siΩ z 
programem ipfwadm. Prosty IP-Firewall powinien skutecznie zlikwidowaµ problem 
zbΩdnych i/lub niemile widzianych po│╣cze±. Je£li tw≤j Linux jest bramk╣ na £wiat
dla jakiej£ lokalnej sieci na pewno skorzystasz z mo┐liwo£ci jakie daje 
IP-Masquerading.
6) Z plik≤w w obrΩbie systemu usu± bity SetUserID (SUID) wszΩdzie tam gdzie s╣ one 
zbΩdne. 99.9 % w│ama± od srodka' w Linuxie polega na wykorzystaniu takich w│a£nie
 plik≤w w po│╣czeniu z metodami wywo│ania prze│adowania bufora lub stosu.
7) Stosuj sumy kontrolne plik≤w systemowych s│u┐y do tego kilka program≤ 
(np. tripwire). DziΩki temu systematycznie bΩdziesz otrzymywa│ raporty na
temat stanu plik≤w w systemie, zostaniesz tak┐e zaalarmowany o ka┐dej zmianie.
Wyeliminujesz w ten spos≤b ryzyko podmienienia jakiegokolwiek pliku. CzΩsto jest
tak, ┐e hacker po w│amaniu stara siΩ zapewniµ sobie sta│y dostΩp do wszystkich 
zasob≤w systemu. Naj│atwiej jest osi╣gn╣µ to poprzez zamianΩ kt≤rego£ z program≤w 
odpowiedzialnych za komunikacjΩ zewnΩtrzn╣. Opr≤cz wykonywania standardowych 
czynno£ci program taki zawiera ukryte tylne drzwi, um w dowolnej chwili. 
Inni u┐ytkownicy nie zauwa┐╣ ┐adnej zmiany w dzia│aniu maszyny.
8) U£wiadom swoich u┐ytkownik≤w, kt≤rzy czΩsto nie wiedz╣ co czyni╣ ;) 
Po┐yczanie kont, wymiana hase│ itd. nie powinny mieµ miejsca. Inaczej idea 
identyfikacji u┐ytkownika w ten spos≤b (system hase│) stanie siΩ bezwarto£ciowa. 
9) Stosuj╣c nietypowe konfiguracje, lub przechowuj╣c istotne pliki systemowe
 w nietypowych miejscach zaskoczysz hacker≤w-rutyniarzy, kt≤rzy pr≤buj╣c w│amaµ 
siΩ do Twojego systemu potraktuj╣ go jako kolejny ƒle zabezpieczony i niedopilnowany
 Linuxik, kt≤ry wygl╣da jak setki innych. 

--------------------------------------------------------------------------------


ParΩ s│≤w na zako±czenie

Nie jestem guru od bezpiecze±stwa sieci, nie ma te┐ 100% pewnej metody na 
zabezpieczenie serwera (to trochΩ tak jak z zabezpieczeniem samochodu przed kradzie┐╣). W zwi╣zku z tym nie mogΩ Ci zagwarantowaµ, ┐e po przeczytaniu tego tekstu Tw≤j Linux zamieni siΩ w fortecΩ nie do zdobycia. Przed prawdziwymi hackerami nie ma chyba skutecznej metody obrony. Oni posiadaj╣ jednak swoj╣ etykietΩ i zwykle nie sprawiaj╣ zbyt wielkich k│opot≤w. 
Po zastosowaniu siΩ do powy┐szych rad mo┐esz byµ pewien, ┐e odpadnie Ci problem 
pilnowania systemu przed pseudo-hackerami. S╣ to ludzie, kt≤rzy po us│yszeniu o 
jakiej£ nowej (wg nich) metodzie w│amania natychmiast pr≤buj╣ wykorzystaµ j╣ na 
Linuxach w ca│ym £wiecie. Nie wiedz╣ jakie £lady zostawiaj╣, na czym polega spos≤b
w│amania liczy siΩ £wietna zabawa czyli utrudnianie pracy innym oraz mo┐liwo£µ 
powiedzenia znajomym 'jestem the best bo w│ama│em siΩ na X system≤w'
(sam znam swoistych rekordzist≤w w tej dziedzinie). 
Najgorsze jest to, ┐e czasem uda siΩ takiemu w│amaµ gdzie£ i pod pojΩciem 
'£wietnej zabawy' kryje siΩ na przyk│ad skasowanie ca│ego systemu itp. 
Chodzi tu chyba o popisanie siΩ przed innymi 'chakerami' tego typu - w ko±cu
zrobienie komus 'rm -rf /' to zapewne najbardziej spektakularne widowisko jakie
kiedykolwiek widzieli. 

Chcia│bym aby ten tekst przydatny by│ dla innych administrator≤w, 
kt≤rzy (mam nadziejΩ) nie mieli jeszcze takich problem≤w